코딩테스트 연습 - 크기가 작은 부분 문자열 | 프로그래머스 스쿨
[ 템플릿 코드 ]
#include <string>
#include <vector>
using namespace std;
int solution(string t, string p) {
int answer = 0;
return answer;
}[ 풀이 ]
#include <string>
using namespace std;
int solution(string t, string p)
{
int answer = 0;
int len = p.length();
for(int i = 0; i <= t.length() - len; i++)
{
string sub = "";
for(int j = i; j < i + len; j++)
{
sub += t[j];
}
if(sub <= p)
{
answer++;
}
}
return answer;
}[ 해설 ]
#include <string>
using namespace std;
int solution(string t, string p)
{
// 조건을 만족하는 부분 문자열의 개수를 저장
int answer = 0;
// p의 길이 저장
// 예) p = "271" 이면 len = 3
int len = p.length();
// 부분 문자열의 시작 위치를 하나씩 이동
// 예) t = "3141592", len = 3
// 시작 위치는 0, 1, 2, 3, 4 까지 가능
for(int i = 0; i <= t.length() - len; i++)
{
// 부분 문자열을 저장할 빈 문자열 생성
string sub = "";
// 현재 위치(i)부터 len개의 문자를 직접 붙여서
// 부분 문자열 생성
//
// 예)
// i = 0 이면
// t[0] = '3'
// t[1] = '1'
// t[2] = '4'
//
// 결과 : sub = "314"
for(int j = i; j < i + len; j++)
{
// 현재 문자를 문자열 뒤에 추가
sub += t[j];
}
// 만들어진 부분 문자열이 p보다 작거나 같은지 비교
//
// 예)
// sub = "141"
// p = "271"
//
// "141" <= "271" 이므로 참
if(sub <= p)
{
// 조건을 만족하면 개수 증가
answer++;
}
}
// 최종 개수 반환
return answer;
}[ 타 답안 ]
#include <string>
int solution(std::string t, std::string p) {
int answer = 0;
// 시작 위치(i)를 한 칸씩 이동하며 검사
for(int i = 0; i <= t.size() - p.size(); i++)
{
// substr(시작위치, 글자수)
// 현재 위치(i)부터 p의 길이만큼 문자열을 잘라냄
//
// 예)
// t = "3141592"
// p = "271" (길이 3)
//
// i = 0 -> t.substr(0, 3) -> "314"
// i = 1 -> t.substr(1, 3) -> "141"
// i = 2 -> t.substr(2, 3) -> "415"
// i = 3 -> t.substr(3, 3) -> "159"
// i = 4 -> t.substr(4, 3) -> "592"
//
// 잘라낸 부분 문자열이 p보다 작거나 같으면
// true(1), 아니면 false(0)
answer += (t.substr(i, p.size()) <= p);
}
return answer;
}